/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package proyecto;

import javax.swing.DefaultListModel;

/**
 *
 * @author Luis Romero
 */
public class Controlador {
    Interfaz inter;
    MemoriaPrincipal MP;
    Cola colaHilos;
    LectorArchivos lector;
    Nucleo N1,N2,N3;

    public Controlador(Interfaz i){
        inter =i;
        MP = new MemoriaPrincipal();
        lector = new LectorArchivos();
        colaHilos = new Cola();
    }

    public void Ejecutar(){
        N1 = new Nucleo();
        N2 = new Nucleo();
        N3 = new Nucleo();
        int q = inter.getValorQuantum();
        N1.setQuantum(q);
        N2.setQuantum(q);
        N3.setQuantum(q);
        N1.setMemoria(MP);
        N2.setMemoria(MP);
        N3.setMemoria(MP);
        N1.setID(1);
        N2.setID(2);
        N3.setID(3);
        N1.Reg.setPantalla(inter.p, 1);
        N2.Reg.setPantalla(inter.p, 2);
        N3.Reg.setPantalla(inter.p, 3);
        N1.setControlador(this);
        N2.setControlador(this);
        N3.setControlador(this);
        inter.p.actualizarDatos(N1.Reg.Registros, 1);
        inter.p.actualizarDatos(N2.Reg.Registros, 2);
        inter.p.actualizarDatos(N3.Reg.Registros, 3);
        N1.start();
        N2.start();
        N3.start();
    }

    public void CargarInstrucciones(DefaultListModel lista){
        int y = lista.size();
        for(int i=0;i<y;i++){
            lector.AbrirArchivo(lista.getElementAt(i).toString());
            int[] temp;
            int espacio = -1;
            while((temp = lector.LeerInstruccion())!=null){
                //Insertar la instruccion en la memoria
                if(espacio==-1){
                    espacio = MP.iniciarMemoriaInstrucciones(temp);
                }else{
                    MP.iniciarMemoriaInstrucciones(temp);
                }
            }
            colaHilos.mete(-1, espacio);
        }
    }

    public synchronized int[] PedirHilo(){
        if(colaHilos.vacio()){
            return null;
        }else{
            return colaHilos.saca();
        }
    }
}
